package com.fdb.efp.nls.service.facade.sx;


import com.fdb.basic.framework.core.bean.SedSynCusManageVO;
import com.fdb.basic.framework.core.exception.BizException;
import com.fdb.efp.nls.service.vo.sx.NlsCreditInfoVO;

import java.math.BigDecimal;
import java.util.List;


/**
 * <p>Description:网贷授信申请表				<p>
 * @author ligm
 * @date 2019-03-04
 */
public interface NlsCreditInfoService {
	
	public List<NlsCreditInfoVO> queryAllOwner(NlsCreditInfoVO nlsCreditInfoVo);
	
	public List<NlsCreditInfoVO> queryAllCurrOrg(NlsCreditInfoVO nlsCreditInfoVo);
	
	public List<NlsCreditInfoVO> queryAllCurrDownOrg(NlsCreditInfoVO nlsCreditInfoVo);

	public List<NlsCreditInfoVO> queryAllCurrOwnerPrd(NlsCreditInfoVO nlsCreditInfoVo);

	public List<NlsCreditInfoVO> queryAllByCondition(NlsCreditInfoVO nlsCreditInfoVo);

	public int insertNlsCreditInfo(NlsCreditInfoVO inNlsCreditInfoVo);
	
	public int deleteByPk(NlsCreditInfoVO nlsCreditInfoVo);
	
	public int updateByPk(NlsCreditInfoVO nlsCreditInfoVo);
	
	public NlsCreditInfoVO queryByPk(NlsCreditInfoVO nlsCreditInfoVo);
	
	public NlsCreditInfoVO queryCopy(NlsCreditInfoVO nlsCreditInfoVo);
	
	public List<NlsCreditInfoVO> queryCertCode(NlsCreditInfoVO nlsCreditInfoVO);
	
	/**
	 * 
	 * 同步授信申请正式表有数据则更新，无则新增 <br>
	 * 0.1:ludayong:2019年5月10日 下午3:35:56:新增 <br>
	 * 
	 * @author ludayong
	 * @since 2019年5月10日 下午3:35:56
	 * @date 2019年5月10日 下午3:35:56
	 * @version 0.1
	 */
	public int insertOrUpdateNlsCreditInfo(List<NlsCreditInfoVO> nlsCreditInfoVOList);

	/**
	 * 根据用信bd_transaction_id查询对应的授信申请: <br>
	 *
	 * 0.1:caoxin:2019/6/10 8:11: <br>
	 * @author caoxin
	 * @return
	 * @since 2019/6/10 8:11
	 * @date 2019/6/10 8:11
	 * @version 0.1
	 */
	NlsCreditInfoVO queryByTransactionId(String transactionId);

	/**
	 * 通过身份证号和身份证证件类型判断 一个用户是否存在多个授信: <br>
	 *
	 * 0.1:caoxin:2019/4/18 14:56: TODO: <br>
	 * @author caoxin
	 * @return
	 * @since 2019/4/18 14:56
	 * @date 2019/4/18 14:56
	 * @version 0.1
	 */

	List<NlsCreditInfoVO> countPeopelHasCredits(NlsCreditInfoVO nlsCreditInfoVO);
	
	/**
	 * 
	 * TODO <br>
	 * 0.1:wanglihua:2019年4月19日 下午5:48:33:TODO <br>
	 * @author wanglihua
	 * @since 2019年4月19日 下午5:48:33
	 * @date 2019年4月19日 下午5:48:33
	 * @version 0.1 初始为0.1,后续变更则修改
	 */
	public NlsCreditInfoVO queryContractEle(NlsCreditInfoVO nlsCreditInfoVO);

	/**
	 * 
	 * TODO <br>
	 * @author wanglihua
	 * @since 2019年4月30日 下午3:42:09
	 * @date 2019年4月30日 下午3:42:09
	 * @version 0.1
	 */
	public NlsCreditInfoVO queryByLmtApplySeq(String lmtApplySeq);

	/**
	 * 
	 * TODO 将申请金额和审批金额更新为测算额度<br>
	 * @author wanglihua
	 * @since 2019年5月8日 下午7:25:04
	 * @date 2019年5月8日 下午7:25:04
	 * @version 0.1 
	 */
	public int updateAmtByApplySeq(NlsCreditInfoVO nlsCreditInfoVO);
	
	/**
	 * 
	 * TODO 将审批状态更新为拒绝<br>
	 * @author wanglihua
	 * @since 2019年5月8日 下午7:25:04
	 * @date 2019年5月8日 下午7:25:04
	 * @version 0.1 
	 * @param apprvSts 
	 */
	public int updateApprvSts(String apprvSts, String applySeq );

	/**
	 * 获取需要上传文件的审批通过的授信流水
	 * @param recordsNum 获取的数量
	 * @param bizType 文档业务类型
	 * @param prdId 产品编号
	 * @return
	 */
	public List<NlsCreditInfoVO> getNeedUploadList(Integer recordsNum, String bizType,String prdId);

	/**
	 * 根据产品id获取加戳四要素至少有一为空的数据
	 * @param prdId
	 * @return
	 */
	public List<NlsCreditInfoVO> getFourElementsIfNullList(String prdId);
	/**
	 * 需求编号：【2019D0519】（业务提的需求编号）
	 * 问题编号：【xxxxxxx】（若不是因为修复问题而新增该类，则留空）
	 * 开发人员：qiuyf
	 * 创建日期：2019年5月21日 下午5:12:22
	 * 功能描述：通过证件类型、证件号码，查询在途、通过的授信信息
	 */
	public List<NlsCreditInfoVO> getCreditsBycust(NlsCreditInfoVO nlsCreditInfoVO);
	
	/**
	 * 需求编号：2019D0519<br/>
	 * 问题编号：<br/>
	 * 功能描述：通过创建时间模糊查询（最新更新时间为空）或最近更新时间模糊查询所有当天所有授信记录<br/>
	 * 开发人员：周才顺<br/>
	 * 创建时间：2019年5月27日 下午5:05:10<br/>
	 * @author zhoucs1
	 * @since  1.0 
	 * @version 1.0
	 * @param nlsCreditInfoVO
	 * @return
	 */
	public List<NlsCreditInfoVO> queryAllByCurrentDate(NlsCreditInfoVO nlsCreditInfoVO);

	public boolean batchUpdateCusManage(List<SedSynCusManageVO> SedSynCusManageVOList);
	
	/**
	 * 需求编号：【2019D0519】（业务提的需求编号）
	 * 问题编号：【xxxxxxx】（若不是因为修复问题而新增该类，则留空）
	 * 开发人员：qiuyf
	 * 创建日期：2019年6月24日 下午7:15:53
	 * 功能描述：根据不确定的条件数量唯一标识一条信息
	 */
	public NlsCreditInfoVO queryByCondition(NlsCreditInfoVO nlsCreditInfoVo);

	/**
	 * 需求编号：【额度管控】
	 * 问题编号：【额度管控】
	 * 开发人员：【chenxuan】
	 * 创建/修改日期：【2019/9/3】
	 * 修改描述：
	 * @Param []
	 * @return int
	 **/
	int inValidLmtProContOverExpireDate(String openDay);

	public List<NlsCreditInfoVO> queryAllByConditionPage(NlsCreditInfoVO nlsCreditInfoVO);

	/**
	 * 获取客户经理记录
	 * @param prdId
	 * @return
	 */
	List<NlsCreditInfoVO> getCusManagerRecord(String prdId,String orgCode) throws BizException;

	NlsCreditInfoVO queryByPrdSeq(String preLmtApplySeq);

	/**
	 *需求编号：【2019D1218】（普税贷需求）
	 *问题编号：【2019D1218】（普税贷查询审批日期区间授信信息）
	 *开发人员：【ludayong】
	 *创建日期：【2020/3/18 12:26】
	 *功能描述：
	 *修改日期：【2020/3/18 12:26】
	 *修改描述：
	 */
	public List<NlsCreditInfoVO> queryPsdBtApprvDateByPage(NlsCreditInfoVO nlsCreditInfoVO);

	/**
	 *需求编号：【2019D1218】（普税贷需求）
	 *问题编号：【2019D1218】（普税贷查询审批日期区间授信信息统计数据量）
	 *开发人员：【ludayong】
	 *创建日期：【2020/3/18 12:27】
	 *功能描述：
	 *修改日期：【2020/3/18 12:27】
	 *修改描述：
	 */
	public int queryPsdBtApprvDateCount(NlsCreditInfoVO nlsCreditInfoVO);

	/**
	 * 根据全局流水号查询授信申请记录
	 * @param nlsCreditInfoVO
	 * @return
	 */
    List<NlsCreditInfoVO> selectByGlobalSerno(NlsCreditInfoVO nlsCreditInfoVO);

	/**
	 * 根据担保类型和证件号码查询授信申请记录
	 * @return
	 */
	List<NlsCreditInfoVO> selectByGmAndCertCode(String gm,String certCode) throws Exception;

	List<NlsCreditInfoVO> queryByCucCodeAndPrdId(NlsCreditInfoVO nlsCreditInfoVO) throws Exception;

	/**
	 * 根据预授信流水号查询授信申请记录
	 *
	 * @param preLmtApplySeq
	 * @return
	 */
	List<NlsCreditInfoVO> queryByPreLmtApplySeq(String preLmtApplySeq);

	/**
	 * 统计授信审批额度总数
	 * @param prdId 产品
	 * @return
	 */
	BigDecimal queryArroveLimitTotal(String prdId);

    List<NlsCreditInfoVO> queryInPreLmtApplySeq(List<String> list) throws Exception;

	/**
	 * 开发人员：
	 * 创建日期：2020年7月27日18:23:21
	 * 功能描述：通过证件类型、证件号码，查询在途的授信信息
	 */
	public int queryCreditOnWay(NlsCreditInfoVO nlsCreditInfoVO);


	/**
	 * 查询在途授信
	 * @param certType
	 * @param certCode
	 * @return
	 */
	public List<NlsCreditInfoVO> queryCreditDuring(String certType,String certCode,String prdId,String applySeq);
	public int updateAcctNo(NlsCreditInfoVO nlsCreditInfoVO);
}
